import json

import pandas as pd
from pandas import DataFrame


def getdata():
    # 读取json文件
    with open("data.json", "r", encoding="utf-8") as f:
        data = json.load(f)
    data_Json = {'data': data, 'len': len(data)}
    # 获取到包含所有数据的字典
    return data_Json


def 统计类别数据():
    """
    统计并返回药品剂型的数据，格式化为echarts饼图所需的输入格式。
    # 这是符合echarts要求的数据格式-> 饼图
    返回:
        dict: 包含seriesData和legendData两个键的字典。
            - seriesData是一个列表，其中每个元素代表一个剂型，包含剂型名称和数量。
            - legendData是剂型名称的列表，用于echarts的图例。
    """
    # 获取原始数据
    data = getdata()
    # 打印前10条数据用于调试
    print(data['data'][:10])
    # 将数据转换为DataFrame格式，指定索引为空
    df = DataFrame(data['data'], index=None)
    print(df.head(10))
    # 统计药品剂型的出现次数
    value_counts = df['药品剂型'].value_counts()
    # 将统计结果转换为字典格式->series转字典：
    all_data = value_counts.to_dict()
    # 构建echarts所需的seriesData格式数据
    seriesData = []
    for key in list(all_data.keys()):
        seriesData.append({
            "name": key,
            "value": all_data[key]
        })
    # 返回构建好的数据字典
    return {
        "seriesData": seriesData,
        'legendData': list(value_counts.to_dict().keys())
    }


def 价格区间数据():
    data = getdata()
    df = DataFrame(data['data'], index=None)
    # 区间范围
    bins = [1, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 2000, 3000, 4000]

    # 将值划分到不同的区间并统计每个区间的数量
    df['Bin'] = pd.cut(df['price'], bins=bins)
    counts = df['Bin'].value_counts().sort_index()

    dist_data = counts.to_dict()
    print(dist_data)

    # 遍历字典，将每个区间的数量转换为字典
    seriesData = []
    return_data = {}
    for key in dist_data.keys():
        return_data[str(key)] = dist_data[key]

    # 获取键列表
    keys = list(return_data.keys())
    # 获取值列表
    values = list(return_data.values())

    # 转换为字典
    return {
        "keys": keys,
        "values": values
    }


def count_words(text):
    """
         统计文本中每个单词出现的次数
    :param text:
    :return:
    """
    # 将文本转换为小写->并按空格分割为单词列表
    words = text.lower().split()
    # 创建空字典用于存储单词计数
    word_count = {}
    # 遍历单词列表，并将单词计数存储在字典中
    for word in words:
        # 如果单词已经存在于字典中，则计数加1，否则初始化为1
        if word in word_count:
            word_count[word] += 1
        else:
            word_count[word] = 1
    return word_count


import matplotlib.pyplot as plt
from wordcloud import WordCloud


def generate_wordcloud(text):
    """
    根据给定的文本生成词云图。
    Parameters:
    text (str): 用于生成词云图的文本数据。
    Returns:
    None
    """
    # 创建WordCloud对象，并指定字体编码格式
    font_path = 'ZiHun17Hao-MengQuGuoDongTi-2.ttf'  # 替换为实际的字体文件路径
    wordcloud = WordCloud(font_path=font_path, width=800, height=400,
                          background_color='white').generate(text)

    # 绘制词云图
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.show()


def 品牌个数数据统计():
    data = getdata()
    df = DataFrame(data['data'], index=None)
    # 统计各品牌的数量
    value_counts = df['品牌信息'].value_counts()
    # 将统计结果转换为字典格式->series转字典：
    all_data = value_counts.to_dict()
    # 构建echarts所需的seriesData格式数据
    keys = []
    values = []
    for key in list(all_data.keys()):
        values.append(all_data[key])

    # 返回构建好的数据字典
    return {
        "keysList": list(all_data.keys()),
        'valuesList': values
    }
if __name__ == '__main__':
   print( 品牌个数数据统计())